Conventional computer networks typically require protocols to maintain shared state between the communicating entities. These generally take one of two forms: those concerned exclusively with the transfer of data; and those concerned with applications. The first represents a fairly constrained problem that considers addressing, error detection and recovery, flow control, sequencing, etc. Application protocols serve the entire range of applications and hence take on many forms. But even here, within specific problem areas, there can be a fair amount of commonality.
Many protocols have been proposed over the past 25 years to solve the problems of existing data transfer approaches: HDLC and its variants, X.25, TCP, IP, delta-t, TP4, CLNP, XTP, XNS Sequenced Packet, SCTP, RIP, the various forms of IEEE 802, etc. Numerous theses have been written proposing various data transfer protocols to address specific situations. Each of these protocols has its own syntax and behavior. Each must be implemented as a distinct whole. The result has been growing complexity. A typical system may have to support as many as 20 of these protocols and the number of protocols that a company must support in its products is in the 100 s. This proliferation continues unabated.
In addition, the use of addressing in data networks has been a major problem almost from the beginning of computer networks. The earliest addresses for host computers were the hardware port addresses of the switches. The number of switches in a network was sufficiently small that a simple flat address space was sufficient. As networks grew, flat address spaces and the naming of ports became problematic for networks. To route data in a computer network, addresses had to indicate “where” the, destination was. Without such an indication, switches have to store routes to all possible destinations. When the number of destinations was a few 10s or 100s this was not a problem. But as it became millions and billions the problem became more severe. Furthermore, naming the port was acceptable as long as a computer had a single connection to the network. But once computers needed more than one connection for redundancy, problems arose. Since each connection had a separate address, the routing algorithms in the network could not tell that two addresses actually went to the same place. Since they had different addresses they appeared to be different destinations.
There has been little or no advance in the practices of addressing, for example, since the earliest days of the computer networking. Addressing in today's Internet is essentially equivalent to the addressing in networks of the early 1970s. Some progress has been made in aggregating routes by imposing Classless Inter-domain Routing (CIDR) on a small set of IP addresses. But this only accounts for issues of route aggregation and does not address issue of multihoming and mobility. While there has been some discussion of so-called topologically dependent names, in fact these are in mathematical terms actually graph dependent names. In the networking literature, topology is often used to be synonymous with graph. (In the following description of the present invention, the term “topology” will be used to connote a function with specific properties that maps between one or more sets or graphs or a set of graphs for which such a function can be constructed.)
Traditionally, computer networks have been organized according to two fundamentally different approaches: 1) beads on a string or 2) layers. The “beads-on-a-string” model has been primarily used in networks with a telephony background. In this model, the components of the network are viewed as functionally distinct modules connected by interconnecting media. While this approach is not favored for data networks like the Internet, the approach still drives certain technologies in use today, such as ATM.
The functional components of most data networks have been based on a model taken from operating systems composed of functionally distinct layers. The primary characteristics of this approach are: each layer is a black box that hides the complexity of the internal mechanisms of the operation of the layer from the layer above. Hence, a layer provides an abstraction of its mechanisms to the layer above. The service provided by each higher layer is more abstract. Mechanisms that are found in one layer should not need to be repeated in higher layers. This model has been the basis for the OSI Reference Model (ISO 7498), XNS, and for the Internet architecture. However, there have always been problems with this approach both in terms of accommodating requirements of applications and its ability to scale.
It would therefore be desirable to provide methods and systems that enable simpler and more efficient transport of data across networks.